home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / TimerQueue.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  3.1 KB  |  181 lines

  1. package javax.swing;
  2.  
  3. class TimerQueue implements Runnable {
  4.    private static final Object sharedInstanceKey = new StringBuffer("TimerQueue.sharedInstanceKey");
  5.    private static final Object expiredTimersKey = new StringBuffer("TimerQueue.expiredTimersKey");
  6.    Timer firstTimer;
  7.    boolean running;
  8.    private static final Object classLock = new Object();
  9.  
  10.    public TimerQueue() {
  11.       this.start();
  12.    }
  13.  
  14.    synchronized void addTimer(Timer var1, long var2) {
  15.       if (!var1.running) {
  16.          Timer var4 = null;
  17.  
  18.          Timer var5;
  19.          for(var5 = this.firstTimer; var5 != null && var5.expirationTime <= var2; var5 = var5.nextTimer) {
  20.             var4 = var5;
  21.          }
  22.  
  23.          if (var4 == null) {
  24.             this.firstTimer = var1;
  25.          } else {
  26.             var4.nextTimer = var1;
  27.          }
  28.  
  29.          var1.expirationTime = var2;
  30.          var1.nextTimer = var5;
  31.          var1.running = true;
  32.          this.notify();
  33.       }
  34.    }
  35.  
  36.    synchronized boolean containsTimer(Timer var1) {
  37.       return var1.running;
  38.    }
  39.  
  40.    synchronized long postExpiredTimers() {
  41.       long var4;
  42.       do {
  43.          Timer var1 = this.firstTimer;
  44.          if (var1 == null) {
  45.             return 0L;
  46.          }
  47.  
  48.          long var2 = System.currentTimeMillis();
  49.          var4 = var1.expirationTime - var2;
  50.          if (var4 <= 0L) {
  51.             try {
  52.                var1.post();
  53.             } catch (SecurityException var7) {
  54.             }
  55.  
  56.             this.removeTimer(var1);
  57.             if (var1.isRepeats()) {
  58.                this.addTimer(var1, var2 + (long)var1.getDelay());
  59.             }
  60.          }
  61.  
  62.          try {
  63.             this.wait(1L);
  64.          } catch (InterruptedException var6) {
  65.          }
  66.       } while(var4 <= 0L);
  67.  
  68.       return var4;
  69.    }
  70.  
  71.    synchronized void removeTimer(Timer var1) {
  72.       if (var1.running) {
  73.          Timer var2 = null;
  74.          Timer var3 = this.firstTimer;
  75.  
  76.          boolean var4;
  77.          for(var4 = false; var3 != null; var3 = var3.nextTimer) {
  78.             if (var3 == var1) {
  79.                var4 = true;
  80.                break;
  81.             }
  82.  
  83.             var2 = var3;
  84.          }
  85.  
  86.          if (var4) {
  87.             if (var2 == null) {
  88.                this.firstTimer = var1.nextTimer;
  89.             } else {
  90.                var2.nextTimer = var1.nextTimer;
  91.             }
  92.  
  93.             var1.expirationTime = 0L;
  94.             var1.nextTimer = null;
  95.             var1.running = false;
  96.          }
  97.       }
  98.    }
  99.  
  100.    public synchronized void run() {
  101.       try {
  102.          while(this.running) {
  103.             long var1 = this.postExpiredTimers();
  104.  
  105.             try {
  106.                this.wait(var1);
  107.             } catch (InterruptedException var5) {
  108.             }
  109.          }
  110.  
  111.       } catch (ThreadDeath var6) {
  112.          this.running = false;
  113.  
  114.          for(Timer var4 = this.firstTimer; var4 != null; var4 = var4.nextTimer) {
  115.             var4.eventQueued = false;
  116.          }
  117.  
  118.          SystemEventQueueUtilities.restartTimerQueueThread();
  119.          throw var6;
  120.       }
  121.    }
  122.  
  123.    public static TimerQueue sharedInstance() {
  124.       Object var1 = classLock;
  125.       synchronized(var1){}
  126.  
  127.       TimerQueue var0;
  128.       try {
  129.          TimerQueue var3 = (TimerQueue)SwingUtilities.appContextGet(sharedInstanceKey);
  130.          if (var3 == null) {
  131.             var3 = new TimerQueue();
  132.             SwingUtilities.appContextPut(sharedInstanceKey, var3);
  133.          }
  134.  
  135.          var0 = var3;
  136.       } catch (Throwable var5) {
  137.          throw var5;
  138.       }
  139.  
  140.       return var0;
  141.    }
  142.  
  143.    synchronized void start() {
  144.       if (this.running) {
  145.          throw new RuntimeException("Can't start a TimerQueue that is already running");
  146.       } else {
  147.          Thread var1 = new Thread(this, "TimerQueue");
  148.  
  149.          try {
  150.             var1.setDaemon(true);
  151.          } catch (SecurityException var2) {
  152.          }
  153.  
  154.          var1.start();
  155.          this.running = true;
  156.       }
  157.    }
  158.  
  159.    synchronized void stop() {
  160.       this.running = false;
  161.       this.notify();
  162.    }
  163.  
  164.    public synchronized String toString() {
  165.       StringBuffer var1 = new StringBuffer();
  166.       var1.append("TimerQueue (");
  167.       Timer var2 = this.firstTimer;
  168.  
  169.       while(var2 != null) {
  170.          var1.append(var2.toString());
  171.          var2 = var2.nextTimer;
  172.          if (var2 != null) {
  173.             var1.append(", ");
  174.          }
  175.       }
  176.  
  177.       var1.append(")");
  178.       return var1.toString();
  179.    }
  180. }
  181.